iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Odoo

Odoo 16 入門介紹系列 第 8

@api 種類跟介紹

  • 分享至 

  • xImage
  •  

今天我們來介紹裝飾器的使用方法跟種類:

from odoo import models, fields, api

class Product(models.Model):
    _name = 'custom.product'
    _description = 'Custom Product Model'

    name = fields.Char(string='Product Name', required=True)
    stock_quantity = fields.Integer(string='Stock Quantity', default=0)
    price = fields.Float(string='Price')

    @api.constrains('stock_quantity')
    def _check_stock_quantity(self):
        for product in self:
            if product.stock_quantity < 0:
                raise models.ValidationError("Stock quantity cannot be negative!")

    @api.depends('stock_quantity')
    def _compute_value(self):
        for product in self:
            product.value = product.stock_quantity * product.price

    @api.onchange('price')
    def _on_price_change(self):
        if self.price < 0:
            self.price = 0

    @api.model
    def create(self, vals):
        if 'stock_quantity' in vals and vals['stock_quantity'] < 0:
            vals['stock_quantity'] = 0
        return super(Product, self).create(vals)
  • @api.constrains :
    1. 無法控制關聯字段: 使用@api.constrains無法直接限制涉及到其他模型的關聯字段的相關設定。如果你想要對關聯字段的數據施加約束,你需要在這些關聯模型上使用相應的裝飾器來實現。
    2. 僅對視圖操作有效: @api.constrains裝飾器僅對使用Odoo用戶界面進行的操作有效,對透過API進行的操作無效。如果你希望同樣的約束也適用於通過API進行的操作,你需要在API請求處理中實現這些約束檢查邏輯。
  • @api.depends : 讓你告訴系統:「如果這個欄位改變了,這個方法需要運行以更新其他欄位。」這樣你就不必手動更新這些值,系統會自動處理。
  • @api.onchange : 裝飾器允許您在特定字段的值變化時,自動執行預定義的方法,從而實現自動化的業務邏輯處理。
  • @api.model : 是在Odoo模型中定義與模型本身相關的方法時使用的裝飾器。在這些方法中,"self" 代表模型本身,而不是特定的記錄。這些方法通常用於處理與整個模型相關的邏輯,而不是針對單個記錄的操作。例如,在建立新記錄時可以使用這樣的方法。

明天我們接著介紹 Environment 的類型


上一篇
Model Field 類型
下一篇
Environment 跟 record 介紹
系列文
Odoo 16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言